package com.woniuxy.portal.config;

import com.woniuxy.portal.config.anon.IdempotentInterceptor;
import com.woniuxy.portal.interceptor.LoginInterceptor;
import com.woniuxy.portal.interceptor.UrlProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

/**
 * 这个类是一个自定义的配置类，它实现了WebMvcConfigurer接口。
 * 通过实现这个接口，你可以对Spring MVC的配置进行定制。
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer {

    @Autowired
    private LoginInterceptor loginInterceptor;
    @Autowired
    private UrlProperties urlProperties;
    @Autowired
    private IdempotentInterceptor idempotentInterceptor;

    /**
     * 注册拦截器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 所有放行的资源放到application.yml配置文件；
        // 自动读取配置文件，封装为UrlProperties对象
        List<String> whitelist = urlProperties.getWhitelist();
        // 拦截器配置
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns("/**")    // 拦截的资源，拦截所有
                .excludePathPatterns(whitelist);    // 放行的资源
        registry.addInterceptor(idempotentInterceptor)
                .addPathPatterns("/order/submitOrder/**"); // 指定拦截哪个路径
    }

    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        // 轻松地配置请求路径和视图之间的映射; 不用写控制器方法了。
        // addViewController("/index.html")  /index.html对应的是访问路径
        // setViewName("index")  这里的hello对应的是/templates/ + index + .html
        registry.addViewController("/").setViewName("index");
        registry.addViewController("/index.html").setViewName("index");
        registry.addViewController("/login.html").setViewName("login");
        registry.addViewController("/cart.html").setViewName("cart");
        registry.addViewController("/register.html").setViewName("register");
        registry.addViewController("/calc.html").setViewName("calc");
        registry.addViewController("/order.html").setViewName("order");
    }
}



